module encoder_16_4(
    input  [15:0] in,
    output [ 3:0] out
);

assign out = ({4{in[ 0]}} & 4'd0 )
           | ({4{in[ 1]}} & 4'd1 )
           | ({4{in[ 2]}} & 4'd2 )
           | ({4{in[ 3]}} & 4'd3 )
           | ({4{in[ 4]}} & 4'd4 )
           | ({4{in[ 5]}} & 4'd5 )
           | ({4{in[ 6]}} & 4'd6 )
           | ({4{in[ 7]}} & 4'd7 )
           | ({4{in[ 8]}} & 4'd8 )
           | ({4{in[ 9]}} & 4'd9 )
           | ({4{in[10]}} & 4'd10)
           | ({4{in[11]}} & 4'd11)
           | ({4{in[12]}} & 4'd12)
           | ({4{in[13]}} & 4'd13)
           | ({4{in[14]}} & 4'd14)
           | ({4{in[15]}} & 4'd15);

endmodule

module encoder_24_5(
    input  [24:0] in,
    output [ 4:0] out
);

assign out = in[ 0]? 5'd0 :
             in[ 1]? 5'd1 :
             in[ 2]? 5'd2 :
             in[ 3]? 5'd3 :
             in[ 4]? 5'd4 :
             in[ 5]? 5'd5 :
             in[ 6]? 5'd6 :
             in[ 7]? 5'd7 :
             in[ 8]? 5'd8 :
             in[ 9]? 5'd9 :
             in[10]? 5'd10:
             in[11]? 5'd11:
             in[12]? 5'd12:
             in[13]? 5'd13:
             in[14]? 5'd14:
             in[15]? 5'd15:
             in[16]? 5'd16:
             in[17]? 5'd17:
             in[18]? 5'd18:
             in[19]? 5'd19:
             in[20]? 5'd20:
             in[21]? 5'd21:
             in[22]? 5'd22:
             in[23]? 5'd23:
             in[24]? 5'd24:
             5'h1f;

endmodule